对象导论
抽象过程
Java所基于语言之一Smalltalk的五个基本特性同时也是面向对象程序的设计方式
- 万物皆为对象
☞ 可以抽取待求解问题的任何概念化构件,使之成为对象。
- 程序是对象的集合,它们通过发送消息来告知彼此所要做的。
☞ 可以说消息是对某个特定对象的方法的调用请求。
- 每个对象都有自己的由其他对象所构成的存储。
☞ 可以通过创建现有对象的包的方式来创建新的对象
- 每个对象都拥有其类型。
☞ 每个对象都是一个类的实例,而不同类的区别正在于可以接收什么样的消息。
- 某一特定类型的所有对象都可以接收同样的消息。
☞ 可替代性。
每个对象都有一个接口
类是一种抽象数据类型,描述了具有相同特性(数据元素)和行为(功能)的对象集合,也可以说每一个对象都属于定义了特性和行为的某个类,每个类的成员或元素都具有某种共性。它的运行方式可以概括为:创建某一类型的变量(对象/实例)-> 操作变量(发送消息/请求)。
类型决定接口,而接口确定了某一特定对象所能发出的请求。
每个对象都提供服务
可以将对象视为服务提供者,提高程序的内聚性。
被隐藏的具体实现
访问控制的存在原因
- 隐藏对数据类型的内部操作必需,而不是用户解决特定问题所需的接口的部分。
- 允许在不影响客户端的前提下改变类内部的工作方式。
访问指定词
public全部可用private类型创建者和类型的内部方法可用protected除类型创建者和类型的内部方法之外,继承的类也可以访问
复用具体实现
组合:使用现有的类合成新的类,新类的成员对象通常被声明为private。如果是动态发生的,通常称之为聚合。
继承
类型不仅仅描述了作用于一个对象集合上的约束条件,同时也描述了与其他类型之间的关系。
一个基类型(基类/超类/父类)包含其所有导出类型(导出类/继承类/子类)的特性和行为。导出类复制了基类的接口,与基类具有相同的类型。从而产生了类型等价性。
使基类与导出类产生差异
- 直接在导出类中添加新方法
覆盖:在导出类中创建方法的新定义
当导出类和基类类型完全相同时(未添加新的方法)-> 纯粹替代 -> 替代方法
伴随多态的可互换对象
Java中默认执行动态绑定,也就产生了后期绑定的概念。当向对象发送消息时,被调用的代码直到运行时才能确定。
单根继承结构
所有的类最终都继承自单一的基类Object。
容器
- 不同的容器提供了不同的接口和外部行为。
- 不同的容器对于某些操作具有不同的效率。
向上转型: 向继承结构的上层转型为一个更泛化的类型。
向下转型: 向继承结构的下层转型为一个更具体的类型。由于向下转型的危险性,从而产生了参数化类型机制。
参数化类型(范型): 一个编译器可以自动制定作用于特定类型上的类,通过<类型信息>来表示,以识别对范型的使用。
对象的创建与生命期
Java采用动态内存分配方式,创建新对象时通过使用new关键字来构建对象的动态实例。并提供了“垃圾回收器”的机制,自动发现不再被使用的对象,继而销毁。
异常处理:处理错误
异常处理是与正常执行路径并行的,在发生错误时执行的另一条路径。
并发编程
线程:彼此独立运行的部分。多个线程同时工作称之为“并发”。
当共享资源时,某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。
一切都是对象
是引用操纵对象
创建一个引用:
|
|
此时还未与对象关联。
必须由你创建所有对象
使引用关联对象,通过new关键字来实现:
|
|
存储区
- 寄存器
☞ 位于处理器内部,是最快的存储区,不能直接控制。
- 堆栈
☞
- 堆
☞
- 常量存储
☞ 常量值通常直接存放在代码程序内部。在嵌入式
- 非RAM存储
☞ 把对象转化成可以存放在其他媒介上的事物,在需要时,可恢复成常规的、基于RAM的对象。如流对象和持久化对象。